{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 机器学习纳米学位\n",
    "## 监督学习\n",
    "## 项目2: 为*CharityML*寻找捐献者"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "欢迎来到机器学习工程师纳米学位的第二个项目！在此文件中，有些示例代码已经提供给你，但你还需要实现更多的功能让项目成功运行。除非有明确要求，你无须修改任何已给出的代码。以**'练习'**开始的标题表示接下来的代码部分中有你必须要实现的功能。每一部分都会有详细的指导，需要实现的部分也会在注释中以'TODO'标出。请仔细阅读所有的提示！\n",
    "\n",
    "除了实现代码外，你还必须回答一些与项目和你的实现有关的问题。每一个需要你回答的问题都会以**'问题 X'**为标题。请仔细阅读每个问题，并且在问题后的**'回答'**文字框中写出完整的答案。我们将根据你对问题的回答和撰写代码所实现的功能来对你提交的项目进行评分。\n",
    ">**提示：**Code 和 Markdown 区域可通过**Shift + Enter**快捷键运行。此外，Markdown可以通过双击进入编辑模式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 开始\n",
    "\n",
    "在这个项目中，你将使用1994年美国人口普查收集的数据，选用几个监督学习算法以准确地建模被调查者的收入。然后，你将根据初步结果从中选择出最佳的候选算法，并进一步优化该算法以最好地建模这些数据。你的目标是建立一个能够准确地预测被调查者年收入是否超过50000美元的模型。这种类型的任务会出现在那些依赖于捐款而存在的非营利性组织。了解人群的收入情况可以帮助一个非营利性的机构更好地了解他们要多大的捐赠，或是否他们应该接触这些人。虽然我们很难直接从公开的资源中推断出一个人的一般收入阶层，但是我们可以（也正是我们将要做的）从其他的一些公开的可获得的资源中获得一些特征从而推断出该值。\n",
    "\n",
    "这个项目的数据集来自[UCI机器学习知识库](https://archive.ics.uci.edu/ml/datasets/Census+Income)。这个数据集是由Ron Kohavi和Barry Becker在发表文章_\"Scaling Up the Accuracy of Naive-Bayes Classifiers: A Decision-Tree Hybrid\"_之后捐赠的，你可以在Ron Kohavi提供的[在线版本](https://www.aaai.org/Papers/KDD/1996/KDD96-033.pdf)中找到这个文章。我们在这里探索的数据集相比于原有的数据集有一些小小的改变，比如说移除了特征`'fnlwgt'` 以及一些遗失的或者是格式不正确的记录。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "## 探索数据\n",
    "运行下面的代码单元以载入需要的Python库并导入人口普查数据。注意数据集的最后一列`'income'`将是我们需要预测的列（表示被调查者的年收入会大于或者是最多50,000美元），人口普查数据中的每一列都将是关于被调查者的特征。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>workclass</th>\n",
       "      <th>education_level</th>\n",
       "      <th>education-num</th>\n",
       "      <th>marital-status</th>\n",
       "      <th>occupation</th>\n",
       "      <th>relationship</th>\n",
       "      <th>race</th>\n",
       "      <th>sex</th>\n",
       "      <th>capital-gain</th>\n",
       "      <th>capital-loss</th>\n",
       "      <th>hours-per-week</th>\n",
       "      <th>native-country</th>\n",
       "      <th>income</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>39</td>\n",
       "      <td>State-gov</td>\n",
       "      <td>Bachelors</td>\n",
       "      <td>13.0</td>\n",
       "      <td>Never-married</td>\n",
       "      <td>Adm-clerical</td>\n",
       "      <td>Not-in-family</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>2174.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   age   workclass education_level  education-num  marital-status  \\\n",
       "0   39   State-gov       Bachelors           13.0   Never-married   \n",
       "\n",
       "      occupation    relationship    race    sex  capital-gain  capital-loss  \\\n",
       "0   Adm-clerical   Not-in-family   White   Male        2174.0           0.0   \n",
       "\n",
       "   hours-per-week  native-country income  \n",
       "0            40.0   United-States  <=50K  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 为这个项目导入需要的库\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from time import time\n",
    "from IPython.display import display # 允许为DataFrame使用display()\n",
    "\n",
    "# 导入附加的可视化代码visuals.py\n",
    "import visuals as vs\n",
    "\n",
    "# 为notebook提供更加漂亮的可视化\n",
    "%matplotlib inline\n",
    "\n",
    "# 导入人口普查数据\n",
    "data = pd.read_csv(\"census.csv\")\n",
    "\n",
    "# 成功 - 显示第一条记录\n",
    "display(data.head(n=1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习：数据探索\n",
    "首先我们对数据集进行一个粗略的探索，我们将看看每一个类别里会有多少被调查者？并且告诉我们这些里面多大比例是年收入大于50,000美元的。在下面的代码单元中，你将需要计算以下量：\n",
    "\n",
    "- 总的记录数量，`'n_records'`\n",
    "- 年收入大于50,000美元的人数，`'n_greater_50k'`.\n",
    "- 年收入最多为50,000美元的人数 `'n_at_most_50k'`.\n",
    "- 年收入大于50,000美元的人所占的比例， `'greater_percent'`.\n",
    "\n",
    "**提示：** 您可能需要查看上面的生成的表，以了解`'income'`条目的格式是什么样的。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total number of records: 45222\n",
      "Individuals making more than $50,000: 11208\n",
      "Individuals making at most $50,000: 34014\n",
      "Percentage of individuals making more than $50,000: 24.78%\n"
     ]
    }
   ],
   "source": [
    "# TODO：总的记录数\n",
    "n_records = len(data)\n",
    "\n",
    "# TODO：被调查者的收入大于$50,000的人数\n",
    "n_greater_50k = len([i for i in data['income'] if i=='>50K'])\n",
    "\n",
    "# TODO：被调查者的收入最多为$50,000的人数\n",
    "n_at_most_50k = n_records-n_greater_50k\n",
    "\n",
    "# TODO：被调查者收入大于$50,000所占的比例\n",
    "greater_percent = n_greater_50k/n_records*100\n",
    "\n",
    "# 打印结果\n",
    "print (\"Total number of records: {}\".format(n_records))\n",
    "print (\"Individuals making more than $50,000: {}\".format(n_greater_50k))\n",
    "print (\"Individuals making at most $50,000: {}\".format(n_at_most_50k))\n",
    "print (\"Percentage of individuals making more than $50,000: {:.2f}%\".format(greater_percent))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "## 准备数据\n",
    "在数据能够被作为输入提供给机器学习算法之前，它经常需要被清洗，格式化，和重新组织 - 这通常被叫做**预处理**。幸运的是，对于这个数据集，没有我们必须处理的无效或丢失的条目，然而，由于某一些特征存在的特性我们必须进行一定的调整。这个预处理都可以极大地帮助我们提升几乎所有的学习算法的结果和预测能力。\n",
    "\n",
    "### 获得特征和标签\n",
    "`income` 列是我们需要的标签，记录一个人的年收入是否高于50K。 因此我们应该把他从数据中剥离出来，单独存放。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 将数据切分成特征和对应的标签\n",
    "income_raw = data['income']\n",
    "features_raw = data.drop('income', axis = 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 转换倾斜的连续特征\n",
    "\n",
    "一个数据集有时可能包含至少一个靠近某个数字的特征，但有时也会有一些相对来说存在极大值或者极小值的不平凡分布的的特征。算法对这种分布的数据会十分敏感，并且如果这种数据没有能够很好地规一化处理会使得算法表现不佳。在人口普查数据集的两个特征符合这个描述：'`capital-gain'`和`'capital-loss'`。\n",
    "\n",
    "运行下面的代码单元以创建一个关于这两个特征的条形图。请注意当前的值的范围和它们是如何分布的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1979efa0e10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化 'capital-gain'和'capital-loss' 两个特征\n",
    "vs.distribution(features_raw)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于高度倾斜分布的特征如`'capital-gain'`和`'capital-loss'`，常见的做法是对数据施加一个<a href=\"https://en.wikipedia.org/wiki/Data_transformation_(statistics)\">对数转换</a>，将数据转换成对数，这样非常大和非常小的值不会对学习算法产生负面的影响。并且使用对数变换显著降低了由于异常值所造成的数据范围异常。但是在应用这个变换时必须小心：因为0的对数是没有定义的，所以我们必须先将数据处理成一个比0稍微大一点的数以成功完成对数转换。\n",
    "\n",
    "运行下面的代码单元来执行数据的转换和可视化结果。再次，注意值的范围和它们是如何分布的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nlt95AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1979f90b2b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 对于倾斜的数据使用Log转换\n",
    "skewed = ['capital-gain', 'capital-loss']\n",
    "features_raw[skewed] = data[skewed].apply(lambda x: np.log(x + 1))\n",
    "\n",
    "# 可视化对数转换后 'capital-gain'和'capital-loss' 两个特征\n",
    "vs.distribution(features_raw, transformed = True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 规一化数字特征\n",
    "除了对于高度倾斜的特征施加转换，对数值特征施加一些形式的缩放通常会是一个好的习惯。在数据上面施加一个缩放并不会改变数据分布的形式（比如上面说的'capital-gain' or 'capital-loss'）；但是，规一化保证了每一个特征在使用监督学习器的时候能够被平等的对待。注意一旦使用了缩放，观察数据的原始形式不再具有它本来的意义了，就像下面的例子展示的。\n",
    "\n",
    "运行下面的代码单元来规一化每一个数字特征。我们将使用[`sklearn.preprocessing.MinMaxScaler`](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html)来完成这个任务。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\conda\\lib\\site-packages\\sklearn\\preprocessing\\data.py:323: DataConversionWarning: Data with input dtype int64, float64 were all converted to float64 by MinMaxScaler.\n",
      "  return self.partial_fit(X, y)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>workclass</th>\n",
       "      <th>education_level</th>\n",
       "      <th>education-num</th>\n",
       "      <th>marital-status</th>\n",
       "      <th>occupation</th>\n",
       "      <th>relationship</th>\n",
       "      <th>race</th>\n",
       "      <th>sex</th>\n",
       "      <th>capital-gain</th>\n",
       "      <th>capital-loss</th>\n",
       "      <th>hours-per-week</th>\n",
       "      <th>native-country</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.30137</td>\n",
       "      <td>State-gov</td>\n",
       "      <td>Bachelors</td>\n",
       "      <td>0.8</td>\n",
       "      <td>Never-married</td>\n",
       "      <td>Adm-clerical</td>\n",
       "      <td>Not-in-family</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0.02174</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.397959</td>\n",
       "      <td>United-States</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       age   workclass education_level  education-num  marital-status  \\\n",
       "0  0.30137   State-gov       Bachelors            0.8   Never-married   \n",
       "\n",
       "      occupation    relationship    race    sex  capital-gain  capital-loss  \\\n",
       "0   Adm-clerical   Not-in-family   White   Male       0.02174           0.0   \n",
       "\n",
       "   hours-per-week  native-country  \n",
       "0        0.397959   United-States  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "# 初始化一个 scaler，并将它施加到特征上\n",
    "scaler = MinMaxScaler()\n",
    "numerical = ['age', 'education-num', 'capital-gain', 'capital-loss', 'hours-per-week']\n",
    "features_raw[numerical] = scaler.fit_transform(data[numerical])\n",
    "\n",
    "# 显示一个经过缩放的样例记录\n",
    "display(features_raw.head(n = 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习：数据预处理\n",
    "\n",
    "从上面的**数据探索**中的表中，我们可以看到有几个属性的每一条记录都是非数字的。通常情况下，学习算法期望输入是数字的，这要求非数字的特征（称为类别变量）被转换。转换类别变量的一种流行的方法是使用**独热编码**方案。独热编码为每一个非数字特征的每一个可能的类别创建一个_“虚拟”_变量。例如，假设`someFeature`有三个可能的取值`A`，`B`或者`C`，。我们将把这个特征编码成`someFeature_A`, `someFeature_B`和`someFeature_C`.\n",
    "\n",
    "| 特征X |                    | 特征X_A | 特征X_B | 特征X_C |\n",
    "| :-: |                            | :-: | :-: | :-: |\n",
    "|  B  |  | 0 | 1 | 0 |\n",
    "|  C  | ----> 独热编码 ----> | 0 | 0 | 1 |\n",
    "|  A  |  | 1 | 0 | 0 |\n",
    "\n",
    "此外，对于非数字的特征，我们需要将非数字的标签`'income'`转换成数值以保证学习算法能够正常工作。因为这个标签只有两种可能的类别（\"<=50K\"和\">50K\"），我们不必要使用独热编码，可以直接将他们编码分别成两个类`0`和`1`，在下面的代码单元中你将实现以下功能：\n",
    " - 使用[`pandas.get_dummies()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html?highlight=get_dummies#pandas.get_dummies)对`'features_raw'`数据来施加一个独热编码。\n",
    " - 将目标标签`'income_raw'`转换成数字项。\n",
    "   - 将\"<=50K\"转换成`0`；将\">50K\"转换成`1`。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "103 total features after one-hot encoding.\n"
     ]
    }
   ],
   "source": [
    "# TODO：使用pandas.get_dummies()对'features_raw'数据进行独热编码\n",
    "features = pd.get_dummies(features_raw)\n",
    "\n",
    "# TODO：将'income_raw'编码成数字值\n",
    "income= income_raw.replace(['>50K', '<=50K'], [1, 0])\n",
    "\n",
    "# 打印经过独热编码之后的特征数量\n",
    "encoded = list(features.columns)\n",
    "print (\"{} total features after one-hot encoding.\".format(len(encoded)))\n",
    "\n",
    "# 移除下面一行的注释以观察编码的特征名字\n",
    "#print (income)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 混洗和切分数据\n",
    "现在所有的 _类别变量_ 已被转换成数值特征，而且所有的数值特征已被规一化。和我们一般情况下做的一样，我们现在将数据（包括特征和它们的标签）切分成训练和测试集。其中80%的数据将用于训练和20%的数据用于测试。然后再进一步把训练数据分为训练集和验证集，用来选择和优化模型。\n",
    "\n",
    "运行下面的代码单元来完成切分。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set has 28941 samples.\n",
      "Validation set has 7236 samples.\n",
      "Testing set has 9045 samples.\n"
     ]
    }
   ],
   "source": [
    "# 导入 train_test_split\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# 将'features'和'income'数据切分成训练集和测试集\n",
    "X_train, X_test, y_train, y_test = train_test_split(features, income, test_size = 0.2, random_state = 0,\n",
    "                                                    stratify = income)\n",
    "# 将'X_train'和'y_train'进一步切分为训练集和验证集\n",
    "X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=0,\n",
    "                                                    stratify = y_train)\n",
    "\n",
    "# 显示切分的结果\n",
    "print (\"Training set has {} samples.\".format(X_train.shape[0]))\n",
    "print (\"Validation set has {} samples.\".format(X_val.shape[0]))\n",
    "print (\"Testing set has {} samples.\".format(X_test.shape[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "## 评价模型性能\n",
    "在这一部分中，我们将尝试四种不同的算法，并确定哪一个能够最好地建模数据。四种算法包含一个*天真的预测器* 和三个你选择的监督学习器。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 评价方法和朴素的预测器\n",
    "*CharityML*通过他们的研究人员知道被调查者的年收入大于\\$50,000最有可能向他们捐款。因为这个原因*CharityML*对于准确预测谁能够获得\\$50,000以上收入尤其有兴趣。这样看起来使用**准确率**作为评价模型的标准是合适的。另外，把*没有*收入大于\\$50,000的人识别成年收入大于\\$50,000对于*CharityML*来说是有害的，因为他想要找到的是有意愿捐款的用户。这样，我们期望的模型具有准确预测那些能够年收入大于\\$50,000的能力比模型去**查全**这些被调查者*更重要*。我们能够使用**F-beta score**作为评价指标，这样能够同时考虑查准率和查全率：\n",
    "\n",
    "$$ F_{\\beta} = (1 + \\beta^2) \\cdot \\frac{precision \\cdot recall}{\\left( \\beta^2 \\cdot precision \\right) + recall} $$\n",
    "\n",
    "\n",
    "尤其是，当 $\\beta = 0.5$ 的时候更多的强调查准率，这叫做**F$_{0.5}$ score** （或者为了简单叫做F-score）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 1 - 天真的预测器的性能\n",
    "\n",
    "通过查看收入超过和不超过 \\$50,000 的人数，我们能发现多数被调查者年收入没有超过 \\$50,000。如果我们简单地预测说*“这个人的收入没有超过 \\$50,000”*，我们就可以得到一个 准确率超过 50% 的预测。这样我们甚至不用看数据就能做到一个准确率超过 50%。这样一个预测被称作是天真的。通常对数据使用一个*天真的预测器*是十分重要的，这样能够帮助建立一个模型表现是否好的基准。 使用下面的代码单元计算天真的预测器的相关性能。将你的计算结果赋值给`'accuracy'`, `‘precision’`, `‘recall’` 和 `'fscore'`，这些值会在后面被使用，请注意这里不能使用scikit-learn，你需要根据公式自己实现相关计算。\n",
    "\n",
    "*如果我们选择一个无论什么情况都预测被调查者年收入大于 \\$50,000 的模型，那么这个模型在**验证集上**的准确率，查准率，查全率和 F-score是多少？*  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.24778883361\n",
      "Naive Predictor on validation data: \n",
      "     Accuracy score: 0.2478 \n",
      "     Precision: 0.2478 \n",
      "     Recall: 1.0000 \n",
      "     F-score: 0.2917\n"
     ]
    }
   ],
   "source": [
    "#不能使用scikit-learn，你需要根据公式自己实现相关计算。\n",
    "\n",
    "#TODO： 计算准确率\n",
    "\n",
    "accuracy =sum(y_val)/len(y_val)\n",
    "print(accuracy)\n",
    "# TODO： 计算查准率 Precision\n",
    "precision = sum(y_val)/len(y_val)\n",
    "\n",
    "# TODO： 计算查全率 Recall\n",
    "recall = sum(y_val)/sum(y_val)\n",
    "\n",
    "# TODO： 使用上面的公式，设置beta=0.5，计算F-score\n",
    "fscore = (1+0.5*0.5)*(precision*recall)/(0.5*0.5*precision+recall)\n",
    "\n",
    "# 打印结果\n",
    "print (\"Naive Predictor on validation data: \\n \\\n",
    "    Accuracy score: {:.4f} \\n \\\n",
    "    Precision: {:.4f} \\n \\\n",
    "    Recall: {:.4f} \\n \\\n",
    "    F-score: {:.4f}\".format(accuracy, precision, recall, fscore))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 监督学习模型\n",
    "### 问题 2 - 模型应用\n",
    "\n",
    "你能够在 [`scikit-learn`](http://scikit-learn.org/stable/supervised_learning.html) 中选择以下监督学习模型\n",
    "- 高斯朴素贝叶斯 (GaussianNB)\n",
    "- 决策树 (DecisionTree)\n",
    "- 集成方法 (Bagging, AdaBoost, Random Forest, Gradient Boosting)\n",
    "- K近邻 (K Nearest Neighbors)\n",
    "- 随机梯度下降分类器 (SGDC)\n",
    "- 支撑向量机 (SVM)\n",
    "- Logistic回归（LogisticRegression）\n",
    "\n",
    "从上面的监督学习模型中选择三个适合我们这个问题的模型，并回答相应问题。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 模型1\n",
    "\n",
    "**模型名称**\n",
    "\n",
    "回答：决策树\n",
    "\n",
    "\n",
    "**描述一个该模型在真实世界的一个应用场景。（你需要为此做点研究，并给出你的引用出处）**\n",
    "\n",
    "回答：泰坦尼克号幸存者预测，首先判别性别，如果是女士，由于女士幸存比例高，则预测生存；如果是男士，先判别船舱级别，如果为三等车厢则直接预测死亡，接下来如果年纪比较大，例如大于30岁，则预测死亡。[ `链接` ](https://classroom.udacity.com/nanodegrees/nd009-cn-advanced/parts/93afd7ee-1022-4c84-a5c1-0cef36e88f25/modules/cf924e64-3c6c-4806-aba9-0863b63a85b0/lessons/cebc6b91-c76f-4e94-b11c-24a2481c27a1/concepts/f953ab42-596f-4736-bf72-7c07c927d212)\n",
    "\n",
    "**这个模型的优势是什么？他什么情况下表现最好？**\n",
    "\n",
    "回答：决策树非常容易理解和解释，能够生成清晰的基于特征选择不同预测结果的树状结构，当数据一些特征比较强势，那么表现效果会很好。\n",
    "\n",
    "**这个模型的缺点是什么？什么条件下它表现很差？**\n",
    "\n",
    "回答：容易过拟合；由于简单，调整单个条件有可能导致结果差异比较大。当分类比较复杂，特征之间联系比较强时，表现比较差\n",
    "\n",
    "**根据我们当前数据集的特点，为什么这个模型适合这个问题。**\n",
    "\n",
    "回答：数据集特征间分类不太强，模型中有几个量权重比较大，对结果影响比较大，模型执行效率好。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 模型2\n",
    "\n",
    "**模型名称**\n",
    "\n",
    "回答：逻辑回归\n",
    "\n",
    "\n",
    "**描述一个该模型在真实世界的一个应用场景。（你需要为此做点研究，并给出你的引用出处）**\n",
    "\n",
    "回答：逻辑回归模型在玉树地震滑坡危险性评价中的应用与检验[ `链接` ](http://www.cqvip.com/qk/98122x/201203/42463664.html)\n",
    "\n",
    "**这个模型的优势是什么？他什么情况下表现最好？**\n",
    "\n",
    "回答：简单，背后逻辑清晰，易于理解，从多个特征中筛选出具有显著影响的特征。\n",
    "\n",
    "**这个模型的缺点是什么？什么条件下它表现很差？**\n",
    "\n",
    "回答：它是一个线性的分类器，所以处理不好特征之间相关的情况。当分类比较复杂和关联性比较强时，表现不好。\n",
    "\n",
    "**根据我们当前数据集的特点，为什么这个模型适合这个问题。**\n",
    "\n",
    "回答：本数据集有几个显著的特征，特征之间联系也不强，执行效率高。并参考了后面比较的结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 模型3\n",
    "\n",
    "**模型名称**\n",
    "\n",
    "回答：AdaBoostClassifier\n",
    "\n",
    "\n",
    "**描述一个该模型在真实世界的一个应用场景。（你需要为此做点研究，并给出你的引用出处）**\n",
    "\n",
    "回答：基于BP-Adaboost模型的年降水量预测研究[ `链接` ](http://www.cqvip.com/qk/95562a/201405/663290886.html)\n",
    "\n",
    "**这个模型的优势是什么？他什么情况下表现最好？**\n",
    "\n",
    "回答：把多个较弱的分类器结合起来的时候，组成一个强的分类器。自带特征选择。\n",
    "\n",
    "**这个模型的缺点是什么？什么条件下它表现很差？**\n",
    "\n",
    "回答：训练时间较长，比较依赖于弱选择器。当数据存在异样样本时和分布不均匀时，表现不好。\n",
    "\n",
    "**根据我们当前数据集的特点，为什么这个模型适合这个问题。**\n",
    "\n",
    "回答：Adaboost适用性强，训练精度高，使用比较简单。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习 - 创建一个训练和预测的流水线\n",
    "为了正确评估你选择的每一个模型的性能，创建一个能够帮助你快速有效地使用不同大小的训练集并在验证集上做预测的训练和验证的流水线是十分重要的。\n",
    "你在这里实现的功能将会在接下来的部分中被用到。在下面的代码单元中，你将实现以下功能：\n",
    "\n",
    " - 从[`sklearn.metrics`](http://scikit-learn.org/stable/modules/classes.html#sklearn-metrics-metrics)中导入`fbeta_score`和`accuracy_score`。\n",
    " - 用训练集拟合学习器，并记录训练时间。\n",
    " - 对训练集的前300个数据点和验证集进行预测并记录预测时间。\n",
    " - 计算预测训练集的前300个数据点的准确率和F-score。\n",
    " - 计算预测验证集的准确率和F-score。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# TODO：从sklearn中导入两个评价指标 - fbeta_score和accuracy_score\n",
    "from sklearn.metrics import fbeta_score, accuracy_score\n",
    "\n",
    "def train_predict(learner, sample_size, X_train, y_train, X_val, y_val): \n",
    "    '''\n",
    "    inputs:\n",
    "       - learner: the learning algorithm to be trained and predicted on\n",
    "       - sample_size: the size of samples (number) to be drawn from training set\n",
    "       - X_train: features training set\n",
    "       - y_train: income training set\n",
    "       - X_val: features validation set\n",
    "       - y_val: income validation set\n",
    "    '''\n",
    "    \n",
    "    results = {}\n",
    "    \n",
    "    # TODO：使用sample_size大小的训练数据来拟合学习器\n",
    "    # TODO: Fit the learner to the training data using slicing with 'sample_size'\n",
    "    start = time() # 获得程序开始时间\n",
    "    learner.fit(X_train[:sample_size],y_train[:sample_size])\n",
    "    end = time() # 获得程序结束时间\n",
    "    \n",
    "    # TODO：计算训练时间\n",
    "    results['train_time'] = end-start\n",
    "    \n",
    "    # TODO: 得到在验证集上的预测值\n",
    "    #       然后得到对前300个训练数据的预测结果\n",
    "    start = time() # 获得程序开始时间\n",
    "    predictions_val = learner.predict(X_val)\n",
    "    predictions_train = learner.predict(X_train[: 300])\n",
    "    end = time() # 获得程序结束时间\n",
    "    \n",
    "    # TODO：计算预测用时\n",
    "    results['pred_time'] = end-start\n",
    "            \n",
    "    # TODO：计算在最前面的300个训练数据的准确率\n",
    "    results['acc_train'] = accuracy_score(y_train[: 300],predictions_train)\n",
    "        \n",
    "    # TODO：计算在验证上的准确率\n",
    "    results['acc_val'] = accuracy_score(y_val,predictions_val)\n",
    "    \n",
    "    # TODO：计算在最前面300个训练数据上的F-score\n",
    "    results['f_train'] = fbeta_score(y_train[: 300],predictions_train,beta=0.5)\n",
    "        \n",
    "    # TODO：计算验证集上的F-score\n",
    "    results['f_val'] = fbeta_score(y_val,predictions_val,beta=0.5)\n",
    "       \n",
    "    # 成功\n",
    "    print (\"{} trained on {} samples.\".format(learner.__class__.__name__, sample_size))\n",
    "        \n",
    "    # 返回结果\n",
    "    return results"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习：初始模型的评估\n",
    "在下面的代码单元中，您将需要实现以下功能：             \n",
    "- 导入你在前面讨论的三个监督学习模型。             \n",
    "- 初始化三个模型并存储在`'clf_A'`，`'clf_B'`和`'clf_C'`中。\n",
    "  - 使用模型的默认参数值，在接下来的部分中你将需要对某一个模型的参数进行调整。             \n",
    "  - 设置`random_state`  (如果有这个参数)。       \n",
    "- 计算1%， 10%， 100%的训练数据分别对应多少个数据点，并将这些值存储在`'samples_1'`, `'samples_10'`, `'samples_100'`中\n",
    "\n",
    "**注意：**取决于你选择的算法，下面实现的代码可能需要一些时间来运行！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DecisionTreeClassifier trained on 289 samples.\n",
      "DecisionTreeClassifier trained on 2894 samples.\n",
      "DecisionTreeClassifier trained on 28941 samples.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\conda\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LogisticRegression trained on 289 samples.\n",
      "LogisticRegression trained on 2894 samples.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\conda\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n",
      "D:\\conda\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LogisticRegression trained on 28941 samples.\n",
      "AdaBoostClassifier trained on 289 samples.\n",
      "AdaBoostClassifier trained on 2894 samples.\n",
      "AdaBoostClassifier trained on 28941 samples.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nIUIIY69LZOwfgYeaMMYYY4wxZgL8P1cyxhhjjDFmAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgzxhhj\njDFmAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgzxhhjjDFmAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgz\nxhhjjDFmAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgzxhhjjDFmAhx4M8YYY4wxZgIceDPGGGOMMWYC\nHHgzxhhjjDFmAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgzxhhjjDFmAhx4M8YYY4wxZgIceDPGGGOM\nMWYCHHgzxhhjjDFmAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgzxhhjjDFmAhx4M8YYY4wxZgIceDPG\nGGOMMWYCHHgzxhhjjDFmAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgzxhhjjDFmAhx4M8YYY4wxZgIc\neDPGGGOMMWYCHHgzxhhjjDFmAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgzxhhjjDFmAhx4M8YYY4wx\nZgIceDPGGGOMMWYCHHgzxhhjjDFmAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgzxhhjjDFmAhx4M8YY\nY4wxZgIceDPGGGOMMWYCHHgzxhhjjDFmAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgzxhhjjDFmAhx4\nM8YYY4wxZgIceDPGGGOMMWYCHHgzxhhjjDFmAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgzxhhjjDFm\nAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgzxhhjjDFmAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgzxhhj\njDFmAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgzxhhjjDFmAhx4M8YYY4wxZgIceDPGGGOMMWYCHHgz\nxhhjjDFmArrHXYD/rw4fPmxpZmY2zNzcfJAQwgkAPe4yMcYYY4wxCCK6U1BQsLCwsHBeRERErqky\n5sD7EdHpdPMdHR2benl5ZVhaWqYScdzNGGOMMfa4CSGQm5trkZSU9Pbdu3cbAhhgqrx5qMmj08zP\nz++OlZVVHgfdjDHGGGNPBiKClZVVnp+f3x0AzUyZNwfej465mZmZeNyFYIwxxhhj91NxmrlJ8zRl\nZowxxhhjjP1TceDNGGOMMcaYCfDDlSa2ytU1PCc11aTb3crFJb93SkqMKfOsCG9v77BXXnklZcaM\nGVfLShsbG2tZu3btsM2bN8e2b98+3RTle9J07NixZkZGhtn27dvPmyK/t956y/v333+vcu7cuZP6\nafPmzXOePHmyd3JysmWvXr1udOvW7XaPHj2CkpKSYjw9PfNNUa7K4rpqVXhqTo5J26SLlVV+Su/e\nT1ybrEhbLElkZKTX2rVrnRMTE09UZtn+7rp37+5/9epVy71795593GV5WK6rXMNTc0x3HnOxcslP\n6W2ac9j/p/1UUbNnz3aJjIz0z8/PP2yK/H7++WeHTp061Tp//vyxgICAPAA4ePCgzWuvveZ/9uxZ\nG1dX17wrV64cJ6KIuXPnXnzrrbdumqJcjxr3eJuYqYPuB82ze/fu/kQUQUQROp2uYdWqVcMjIiKC\nP/zwQ/e7d+9War05dOjQ6Q8//PBaedIGBATkJiQkxLRs2TKjsvKPjIz00q9rSZ/Zs2e7VFZ+pbly\n5YpuyJAh1f39/UOtrKwauri4hDdu3Dh43rx5zvn5jyeenTp16tVdu3ad0X/PzMykUaNG+ffq1Ss1\nLi7u2FdffXW5Y8eOaQkJCTHu7u5/q6AbAEwddD9ont27d/d/5plnaj2K8uhVpC1u2bLFnogiYmNj\nLbXTJ0yYkHzgwIEzJf3OkLb9mZmZRbi5udV77rnnAo4cOWJd0fI/yb777rtLGzdujHvc5agMpgy6\nHza/ixcvWlhaWjasVq1avby8vMosVhFvb+8w7fnC2dk5vE2bNgFHjx41aR2Oi4uzIKKIn3/+2cFw\nXl5eHqZMmVItLCysjp2dXQN7e/sGderUCRk3bpzHjRs3TDrGWa9t27bpCQkJMf7+/kU7ZvTo0dUd\nHBwKjh07duLQoUOnASAhISFm4MCBtx5HGR8FDrxZiSIiItITEhJizp8/f3zLli1ne/bsefM///lP\ntXr16oVcunSp0g68Xl5e+Y6OjoXlSavT6eDr65tvZWVVaQ+uTpgwITkhISFG/6lfv35Gp06dbmqn\nDR48+L4r7cLCQlTmgfzMmTOWDRs2DPnjjz+qjB8//sq+fftObd++/Uzfvn1TPv/8c8/jx48/lkDE\nycmp0MPDo0D//cKFC5Y5OTnUuXPn2/7+/nnOzs6F1tbWwtfXN9/M7MEPKZW9PVnFVaQtlsTJyamw\nonc9vLy8chMSEmIuXrx4bM2aNefv3Lmj69SpU1B2dvYjfyWUKfIAABcXlwI3N7eCslOyyjR37lzX\n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\n9u12W7ZscVy3bp3z5MmTvVesWBHXtWvXuy1atMi8ePHisY0bNzpu27bNcfTo0b5TpkzJP3To0JkH\nfdCusLAQLVq0uDNr1qzLhvO0wZ/h9mSPjr7Ol9ejaosl5CVCQ0NzANmrnpycbNG9e/cae/fuPQfc\na6flOdaUZz1tbW2L1Wt9gLx9+/Yz+tv2hstzcnIqPH78+Knff//dfsuWLY7ff/+928SJE6tv2rTp\n7LPPPpvZvXv3u82aNTu2YcMGp507dzq88cYbNT/77LOsvXv3xj5MHbe0tCw2hIeIUFhY+MQ8KPak\nmjt3rmtBQQGeeeaZEO30goICrFy5soq5uXm5Htbr2LFjUNWqVfO//PLLRH9//1wrKyvRsmXL2rm5\nucU6Lp2dnQv0dTg0NDQnJCQk3tfXN3zhwoXOkZGRlXZ3YtWqVQmHDh269ssvvzht27bNccaMGV5T\np05NHDNmTIl5+Pv7Z589e7bEYU8liYqKcp8zZ47HpEmTLjVq1CjTycmpcPr06e7btm1z0qeJjo6+\nOmjQoNSffvrJaceOHQ5z5sypPWzYsOTZs2cnldVmHmT9CwsLyd7evmDv3r2nDecZDnezt7d/qAfF\nHxXu8WYVcvHiRYsNGzY4P//887cjIiKyrKysRFxcnGVoaGiO4Uen0xX1Mm/cuNGprGXrmZmZoVWr\nVpnTpk1L/uuvv2IbNWqUtmjRIldjaevWrZsdFxdnrb2KvnTpki4+Pt46NDTU6C2tymRubo46depk\nnj592sbYNnB0dCwMCAjIdXZ2zj979qyVsTQ2NjbC19c3/+mnn0779ttv3e/cuXNfu8zKyiJtL5he\nYWEh/vrrL/uhQ4de69Onz51GjRple3p65mt7JAC5Tdu0aZMxY8aMq0eOHDkTFhaWuXDhwqIn2atW\nrVo4cODA20uWLEnctWvXmbNnz9ps3brV6Djv8qhfv37m2bNnbQIDA3MN1/fv9p7vJ139+vWzAcDw\nwdT9+/fb165dOwsAQkJCsi5cuGCdmppa1M0bExNjlZaWVuprxEpri5aWloUAkJ+fX2oQGBISkrl1\n69b7hnuUZsKECckxMTH2+gemynOsCQ8PzwLkw8b65eTl5eHEiRP3PQhn6Omnn84E5Bt7DJddt27d\nolv5Op0OHTp0SJ85c2bSiRMnTru5ueUtWbKk6KEvd3f3gjfffPPmihUrEtatW3fu0KFD9keOHLkv\n4HF2di50d3fP27lzZ7F9tmPHDgdvb+8cBweHJzJg+LvQP1Q5fPjw5H379p3Ufjp27HhzwYIFbuHh\n4dkAoD3OZWdn07Fjx4rqT3JysnlcXJz1mDFjrnbv3v1uREREto2NTWFpz0bo6e+oZGVlmQFAnTp1\nso4ePWqvfbvGvn37bNLT0831dTcwMDBr9+7dxerE1q1bHaytrQtDQkKK6mGjRo2yo6Kirv3555/n\nevbsmbJo0SI3QPbY69dfq2fPnqn79+93+OOPP4yOry7pdYJ79uxxaN68+d2RI0emNm3aNCs0NDTn\nwoUL9/Wwh4SE5L733ns3Nm/efGHMmDFJS5YsKXpIuKw2U1GNGzfOSEtLM8/KyiLDthoUFGT0BQRP\nGu5qYiXKzc2lxMREXWFhIV2/fl23fft2+5kzZ3o4Ozvnf/HFF5ednJwK33777auffvppdSLCCy+8\ncDcvL4+OHDlic/ToUdt58+ZdCQ0NzXnppZduvvvuu75ZWVnUokWLjJSUFPM///zT/qOPPrpumOfv\nv/9u99tvvzl26NDhro+PT96pU6esYmNjbfr06WP0av71119PjY6O9uzWrVvN6Ojoy0IIjB49unq1\natVyX3vtNZO893PixIlXevXqFTRs2LDc/v3733RwcCg8efKk9erVq6uuWbMmXqfTYfz48VfGjx/v\n6+DgUNi1a9fb5ubmOHbsmPUff/zhuHTp0kQAWLBgQXzLli1rh4eHh4wfP/7KU089lWVhYSF27Nhh\nP3v2bI81a9bE6cef6pmZmcHf3z9n5cqVLk2bNs3Izs42Gz9+vLc2zc8//+ywe/duu/bt29+tXr16\n/vHjx63Pnz9v3apVqzsA8P7773v4+/vnPvXUU5k2NjaF8+fPd9XpdKJOnToVHm+u9957711bu3at\nS4cOHQLef//9q35+fnkXL160/Omnn5x69+59q3nz5jy85AFkZGSY7d27t1ggZ2NjIzp06HArMjLS\nV6fTJdSsWTN39uzZbufOnbNZvnz5RQB44403bk6bNs2rZ8+e/p9++mlSRkaG2ZgxY6pbW1sXEpHR\nnr+y2mJgYGCumZkZNmzY4FSlSpWb1tbWQns3Q++DDz642qNHj6DBgwf7vPnmmynW1taFO3futG/R\nokV6Sc9XuLq6FvTu3Tvlk08+8X7llVdul+dYExYWltOqVas7I0eO9NXpdAkeHh7506dPd09PTzdH\nCQ8m64WGhub06NEjZcSIEX43b9683KJFi4y0tDSzAwcO2N64ccNiypQpycuWLasSFxdn2bp163QP\nD4/8ffv22SYnJ1uGhIRkA8Dbb7/t/dRTT2XUr18/y8zMDEuWLHG2tbUtDAgIMBoMjBw58mpUVJRP\nUFBQdrt27dI2b97ssGzZMrdp06Y9UQ+C/R398MMPTsnJyZYjRoy4YRiMDRo0KLVHjx5BFhYWonXr\n1rdHjRrlq9PpEry8vPImT57skZmZWRSEurm5FVStWjV/wYIFbrVr1865fv26bty4cdW1D/3qpaen\nmyUmJuoA4MqVKxYTJ070tLa2LuzUqdMdABg9evT1//znP+49evTw//jjj6/evHlT9/bbb/tGRESk\nP//88+kAMHbs2OS+ffsGjh8/3qN37963Dh48aBsdHe31xhtvXLO2thYnTpywmjt3rmuXLl3u1KhR\nIzcxMdHi4MGDDqGhoZmAHONta2tbuHnzZscGDRpk2djYCDc3t4IPPvjg+h9//OHYpUuXWpGRkUlt\n27ZN8/DwyD927Jj1N99849aiRYs0Y+fjwMDA7HXr1rn897//dfDz88tdsGCBy7Fjx+wcHR0LAPl2\nkeHDh1fv0aPHrVq1auWkpqaa//HHH04BAQFZgHwrUmlt5kF06tQp7emnn77bo0ePwEmTJl2OiIjI\nTE1N1f3555/21tbWhe++++4T/+wDB94mZuXikv84/ufKB/nd4cOH7f38/MLNzc1hb29fEBAQkPXa\na69dHzt27A39EITo6Oirnp6eed999121qKgoHysrq0J/f//sV155pWhc3Zo1a+LHjh3rOWXKFO93\n3nnHwtnZOf/FF180GhRXrVq14ODBg3YLFy6sdvfuXXNXV9e8rl273pw+fbrR/0nP3t5e/Prrr2dH\njBjh065du2AA+Ne//pW2adOmc9qxdI9S9+7d765fv/7slClTPBcvXlwNkO8lbtmy5R39e63ffffd\nFGdn54Ivv/zS/fPPP/fS6XTC19c3u3PnzkXbISQkJPfw4cOnoqKiPPX/K6SDg0NBzZo1s4cOHXot\nLCzM6MFq0aJFF4YNG+bXrFmzEFdX17zIyMirGRkZRb3jLi4u+Xv27HGYP3++e1pamrmbm1tenz59\nUiZPnpwMyNtxM2fO9EhMTLQCgICAgKxly5bF1a5d+4F7D2rUqJG3a9eu02PHjq3eq1evwIyMDHM3\nN7e8xo0bp3l5eT1R70JzsbLKfxz/c+WD/O7YsWN2TZs2LXbr3N/fP/vw4cOnhw8f7jNkyJAaGRkZ\n5rVq1cpavXr1ef2FmoODQ+GGDRvOvfXWW37PPvtsHU9Pz9wJEyZcGT16tG9J7aSstujj45P//vvv\nX541a5bHxx9/7BMREZF+8ODBWMPldOvW7e6aNWvOTZo0yatFixZuFhYWhSEhIZlt27Yt9WGv9957\n79rixYvdvv76a5cRI0akludYs2LFiosDBw70e/nll4NsbGwKX3311RvNmjW7m5OTU+bd3RUrViRE\nRUW5f/bZZ54jR460sre3LwgMDMweNmzYdUC2o6+++qrazJkzPTMzM809PDxyR44ceVX/kKO1tXXh\n5MmTva9cuWJpbm4uateunbV+/fpzxi5GAGDs2LE3MjIyzL744gvPcePG+Xp4eOR98MEHl/8OD026\nWLnkm/p/rqxI+vnz57vWq1cvw1gPaKdOne46Ojrmz50713X58uXxgwcP9uvZs2egtbV1Yd++fVPa\ntWt3Kzk52RKQvdZLly6Ni4yM9G3UqFFdT0/P3KioqMsff/xxdcPlzps3z2PevHkeAODk5FRQp06d\nzPXr15+rV69eDiDby8aNG8+OGzeu+rPPPhtiYWFR2LJlyzvffPNN0UPHvXr1unP9+vX4L7/80iM6\nOtqratWq+QMGDLjx2WefJQGyHcfFxVn379/f5datW7oqVarkt27d+s7cuXMv68s7ffr0xKlTp3rN\nnz/fw93dPffKlSvHraysxM6dO89Nmzat2urVq12io6O9zM3N4ePjk9O2bds72nHwWlOnTr16+fJl\nyz59+gTqdDrRqVOnm4MHD76+du1aFwCwsLAQt2/fNh82bJh/SkqKhZ2dXcHTTz+dNmvWrEtA2W3m\nQZiZmeG33347P3bsWK/33nvP5/r16xb67T1mzJjkspfw+JHhOytZ5YiJiYkPDw9/4g+gjLF/prNn\nz1oGBweHLV++/Hzfvn0rdcz2kyI/Px8BAQGh7dq1uz1//vz7njdgjLGYmBjX8PBwf1Plxz3ejDH2\nD/D11187+/j45NWqVSvn/Pnzlu+//351Ly+v3K5du5b6xpG/k19//dU+OTnZonHjxpl37twx++yz\nz9yvXLliWVKPHmOMmRoH3owx9g+Qmpqqmzp1qtf169ctnZyc8iMiItLXrVt3Qf3nTP8v5Ofn0/Tp\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1979eebf6d8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# TODO：从sklearn中导入三个监督学习模型\n",
    "from sklearn import tree, svm, ensemble,naive_bayes,neighbors,linear_model\n",
    "# TODO：初始化三个模型\n",
    "clf_A = tree.DecisionTreeClassifier()\n",
    "clf_B = linear_model.LogisticRegression()\n",
    "clf_C = ensemble.AdaBoostClassifier()\n",
    "#clf_D=naive_bayes.GaussianNB()\n",
    "#clf_E=ensemble.RandomForestClassifier()\n",
    "#clf_F=ensemble.RandomForestClassifier()\n",
    "#clf_D=ensemble.BaggingClassifier()\n",
    "#clf_F=ensemble.GradientBoostingClassifier()\n",
    "\n",
    "\n",
    "# TODO：计算1%， 10%， 100%的训练数据分别对应多少点\n",
    "samples_1 = int(X_train.shape[0] * 0.01)\n",
    "samples_10 = int(X_train.shape[0] * 0.1)\n",
    "samples_100 = int(X_train.shape[0] * 1)\n",
    "\n",
    "# 收集学习器的结果\n",
    "results1 = {}\n",
    "for clf in [clf_A, clf_B, clf_C]:\n",
    "    clf_name = clf.__class__.__name__\n",
    "    results1[clf_name] = {}\n",
    "    for i, samples in enumerate([samples_1, samples_10, samples_100]):\n",
    "        results1[clf_name][i] = train_predict(clf, samples, X_train, y_train, X_val, y_val)\n",
    "        \n",
    "#results2 = {}\n",
    "#for clf in [clf_D, clf_E, clf_F]:\n",
    "    #clf_name = clf.__class__.__name__\n",
    "    #results2[clf_name] = {}\n",
    "    #for i, samples in enumerate([samples_1, samples_10, samples_100]):\n",
    "        #results2[clf_name][i] = train_predict(clf, samples, X_train, y_train, X_val, y_val)\n",
    "        \n",
    "# 对选择的三个模型得到的评价结果进行可视化\n",
    "vs.evaluate(results1, accuracy, fscore)\n",
    "#vs.evaluate(results2, accuracy, fscore)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "## 提高效果\n",
    "\n",
    "在这最后一节中，您将从三个有监督的学习模型中选择 *最好的* 模型来使用学生数据。你将在整个训练集（`X_train`和`y_train`）上使用网格搜索优化至少调节一个参数以获得一个比没有调节之前更好的 F-score。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 3 - 选择最佳的模型\n",
    "\n",
    "*基于你前面做的评价，用一到两段话向 *CharityML* 解释这三个模型中哪一个对于判断被调查者的年收入大于 \\$50,000 是最合适的。*             \n",
    "**提示：**你的答案应该包括评价指标，预测/训练时间，以及该算法是否适合这里的数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**回答：**LogisticRegression表现比较好\n",
    "原因：对于决策树来说，很明显出现了过拟合现象。对于AdaBoost来说，总体来说精度最高，但是预测/训练时间成本太高，此数据集含有13个特征，特征间联系不强，综合考虑模型的预测精度和时间成本，所以选择逻辑回归"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 4 - 用通俗的话解释模型\n",
    "\n",
    "*用一到两段话，向 *CharityML* 用外行也听得懂的话来解释最终模型是如何工作的。你需要解释所选模型的主要特点。例如，这个模型是怎样被训练的，它又是如何做出预测的。避免使用高级的数学或技术术语，不要使用公式或特定的算法名词。*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**回答： ** 逻辑回归模型使用一个逻辑函数，输入数据，然后输出数据属于某一类别的概率，例如概率>0.5则该输入数据属于1类，反之则属于0类。在学习过程中模型首先根据默认的逻辑函数系数来计算预测值和实际误差，然后根据误差来确定新的函数系数，循环这个过程直到误差在可接受范围内，逻辑函数的系数也就确定了。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习：模型调优\n",
    "调节选择的模型的参数。使用网格搜索（GridSearchCV）来至少调整模型的重要参数（至少调整一个），这个参数至少需尝试3个不同的值。你要使用整个训练集来完成这个过程。在接下来的代码单元中，你需要实现以下功能：\n",
    "\n",
    "- 导入[`sklearn.model_selection.GridSearchCV`](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html) 和 [`sklearn.metrics.make_scorer`](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html).\n",
    "- 初始化你选择的分类器，并将其存储在`clf`中。\n",
    " - 设置`random_state` (如果有这个参数)。\n",
    "- 创建一个对于这个模型你希望调整参数的字典。\n",
    " - 例如: parameters = {'parameter' : [list of values]}。\n",
    " - **注意：** 如果你的学习器有 `max_features` 参数，请不要调节它！\n",
    "- 使用`make_scorer`来创建一个`fbeta_score`评分对象（设置$\\beta = 0.5$）。\n",
    "- 在分类器clf上用'scorer'作为评价函数运行网格搜索，并将结果存储在grid_obj中。\n",
    "- 用训练集（X_train, y_train）训练grid search object,并将结果存储在`grid_fit`中。\n",
    "\n",
    "**注意：** 取决于你选择的参数列表，下面实现的代码可能需要花一些时间运行！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\conda\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:757: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.\n",
      "  \"of iterations.\", ConvergenceWarning)\n",
      "D:\\conda\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:757: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.\n",
      "  \"of iterations.\", ConvergenceWarning)\n",
      "D:\\conda\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:757: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.\n",
      "  \"of iterations.\", ConvergenceWarning)\n",
      "D:\\conda\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:757: ConvergenceWarning: lbfgs failed to converge. Increase the number of iterations.\n",
      "  \"of iterations.\", ConvergenceWarning)\n",
      "D:\\conda\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best_clf\n",
      "------\n",
      "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
      "          intercept_scaling=1, max_iter=100, multi_class='warn',\n",
      "          n_jobs=None, penalty='l2', random_state=42, solver='lbfgs',\n",
      "          tol=0.0001, verbose=0, warm_start=False)\n",
      "\n",
      "Unoptimized model\n",
      "------\n",
      "Accuracy score on validation data: 0.8536\n",
      "F-score on validation data: 0.7182\n",
      "\n",
      "Optimized Model\n",
      "------\n",
      "Final accuracy score on the validation data: 0.8542\n",
      "Final F-score on the validation data: 0.7194\n"
     ]
    }
   ],
   "source": [
    "# TODO：导入'GridSearchCV', 'make_scorer'和其他一些需要的库\n",
    "from sklearn.metrics import make_scorer\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "# TODO：初始化分类器\n",
    "clf = linear_model.LogisticRegression(random_state=42)\n",
    "\n",
    "# TODO：创建你希望调节的参数列表\n",
    "parameters = {'solver': ['liblinear','lbfgs','newton-cg','sag']}\n",
    "\n",
    "# TODO：创建一个fbeta_score打分对象\n",
    "scorer = make_scorer(fbeta_score,beta=0.5)\n",
    "\n",
    "# TODO：在分类器上使用网格搜索，使用'scorer'作为评价函数\n",
    "grid_obj = GridSearchCV(clf, parameters, scoring=scorer,cv=3)\n",
    "\n",
    "# TODO：用训练数据拟合网格搜索对象并找到最佳参数\n",
    "grid_obj.fit(X_train,y_train)\n",
    "# 得到estimator\n",
    "best_clf = grid_obj.best_estimator_\n",
    "\n",
    "# 使用没有调优的模型做预测\n",
    "predictions = (clf.fit(X_train, y_train)).predict(X_val)\n",
    "best_predictions = best_clf.predict(X_val)\n",
    "\n",
    "# 汇报调优后的模型\n",
    "print (\"best_clf\\n------\")\n",
    "print (best_clf)\n",
    "\n",
    "# 汇报调参前和调参后的分数\n",
    "print (\"\\nUnoptimized model\\n------\")\n",
    "print (\"Accuracy score on validation data: {:.4f}\".format(accuracy_score(y_val, predictions)))\n",
    "print (\"F-score on validation data: {:.4f}\".format(fbeta_score(y_val, predictions, beta = 0.5)))\n",
    "print (\"\\nOptimized Model\\n------\")\n",
    "print (\"Final accuracy score on the validation data: {:.4f}\".format(accuracy_score(y_val, best_predictions)))\n",
    "print (\"Final F-score on the validation data: {:.4f}\".format(fbeta_score(y_val, best_predictions, beta = 0.5)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 5 - 最终模型评估\n",
    "\n",
    "_你的最优模型在测试数据上的准确率和 F-score 是多少？这些分数比没有优化的模型好还是差？_\n",
    "**注意：**请在下面的表格中填写你的结果，然后在答案框中提供讨论。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 结果:\n",
    " \n",
    "| 评价指标         |  未优化的模型        | 优化的模型        |\n",
    "| :------------: |  :---------------: | :-------------: | \n",
    "| 准确率          |    0.8536                |         0.8542        |\n",
    "| F-score        |         0.7182            |        0.7194         |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**回答：**模型提升很少，不同的损失函数对结果影响很小。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "----\n",
    "## 特征的重要性\n",
    "\n",
    "在数据上（比如我们这里使用的人口普查的数据）使用监督学习算法的一个重要的任务是决定哪些特征能够提供最强的预测能力。专注于少量的有效特征和标签之间的关系，我们能够更加简单地理解这些现象，这在很多情况下都是十分有用的。在这个项目的情境下这表示我们希望选择一小部分特征，这些特征能够在预测被调查者是否年收入大于\\$50,000这个问题上有很强的预测能力。\n",
    "\n",
    "选择一个有 `'feature_importance_'` 属性的scikit学习分类器（例如 AdaBoost，随机森林）。`'feature_importance_'` 属性是对特征的重要性排序的函数。在下一个代码单元中用这个分类器拟合训练集数据并使用这个属性来决定人口普查数据中最重要的5个特征。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 6 - 观察特征相关性\n",
    "\n",
    "当**探索数据**的时候，它显示在这个人口普查数据集中每一条记录我们有十三个可用的特征。             \n",
    "_在这十三个记录中，你认为哪五个特征对于预测是最重要的，选择每个特征的理由是什么？你会怎样对他们排序？_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**回答：**\n",
    "- 特征1:occupation 职位越高，收入也高，这个关系比较普遍，适用性较强\n",
    "- 特征2:education_level/num 学历越高，收入水平也比较高，\n",
    "- 特征3:marital-status 离异或者单身，收入不稳定\n",
    "- 特征4:age 一般来讲年龄越大，工龄时间长，工资水平高\n",
    "- 特征5:hours-per-week 工作时间高，收入水平高，但是和时薪有关系"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 练习 - 提取特征重要性\n",
    "\n",
    "选择一个`scikit-learn`中有`feature_importance_`属性的监督学习分类器，这个属性是一个在做预测的时候根据所选择的算法来对特征重要性进行排序的功能。\n",
    "\n",
    "在下面的代码单元中，你将要实现以下功能：\n",
    " - 如果这个模型和你前面使用的三个模型不一样的话从sklearn中导入一个监督学习模型。\n",
    " - 在整个训练集上训练一个监督学习模型。\n",
    " - 使用模型中的 `'feature_importances_'`提取特征的重要性。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\noIiIiEjGKABcS02cOJG+ffvSp08fxowZs8r8m266ie23356BAwcybNgwXnjhBQDmzp3LXnvtRf/+\n/RkwYAAXXXRRU2ddpF7sOmvQv1K0bduWQYMGVf/NmTOn3vn+6KOPuPzyy+u9XCncnU022YT//ve/\nALz77ruYGU8++WR1mi5durBw4cJa13H33XcXLTvyPfroo3znO98pOm/s2LF89tlna5B7EWkJFACu\nhaqqqjjhhBO47777qKio4JZbbqGioqJGml69evHYY4/x0ksv8bvf/Y5Ro0YBUFZWxoUXXkhFRQWT\nJ0/msssuW2VZkaxbZ511eP7556v/1uRnI9c0AKyqqqozjZkxdOhQnn76aQAmTZrEjjvuyKRJkwB4\n7bXX6Ny5M507d651HSNGjOCMM86od/5yFACKtG4KANdCU6ZMoU+fPvTu3Zv27dszcuRI7rrrrhpp\nhg0bxle+8hUAhg4dSmVlJQCbb745gwcPBmCDDTagX79+zJs3r2m/gEgLVFVVxemnn86QIUPYfvvt\nueKKKwBYvHgx3/zmNxk8eDADBw6svhbPOOMM3njjDQYNGsTpp5++Sm3aiSeeyPjx44H4acpf/epX\nDB48mFtvvZU33niDfffdl5122ok99tiDGTNmrJKfYcOGVQd8kyZN4pRTTqkREO62224ALFiwgEMO\nOYQhQ4YwZMgQnnrqKQDGjx/PiSeeCMAbb7zB0KFDGThwIGeeeSbrr79+9XYWL17M9773PbbddlsO\nP/xw3J2LL76Yd955h7322ou99tqrIXeziKwlFACuhebNm0ePHj2qP3fv3n21Qdw111zDfvvtt8r0\nOXPm8Nxzz7HLLrs0Sj5FWqrPP/+8uvn3oIMOAuI62nDDDZk6dSpTp07lqquuYvbs2XTs2JE77riD\nZ599lkceeYRf/OIXuDtjxoxhq6224vnnn+f888+vc5udO3fm2WefZeTIkYwaNYpLLrmE6dOnc8EF\nF3D88cevkn633XarDgCnTJnCQQcdxNy5c4EIAIcNGwbAySefzCmnnMLUqVO5/fbbOe6441ZZ18kn\nn8zJJ5/MSy+9RPfu3WvMe+655xg7diwVFRW8+eabPPXUU5x00klsscUWPPLIIzzyyCP127ki0iLo\nPYAt3COPPMI111xTo28QxFP9IYccwtixY+nUqVMz5U5k7ZRrAs73wAMP8OKLL3LbbbcB8PHHHzNz\n5ky6d+/Ob37zGx5//HHatGnDvHnzeO+99+q9zcMOOwyIa3PSpEkceuih1fOWLl26SvohQ4bw3HPP\n8emnn7J8+XLWX399evfuzaxZs5g0aRK/+MUvAHjooYdqdPNYtGgRixcvrrGup59+mjvvvBOAH/7w\nh5x22mnV83beeefqoDDXH3L33Xev9/cTkZZFAeBaqFu3btVP+hAvzu3Wrdsq6V588UWOO+447rvv\nvhp9gZYvX84hhxzC4YcfzsEHH9wkeRZp6dydSy65hOHDh9eYPn78eBYsWMD06dNp164dPXv2LPoe\nvLKyMlasWFH9uTDNeuutB8CKFSvYaKONVglAC6277rpsvfXWXHvttdXdOoYOHcq9997L+++/T9++\nfavXN3nyZDp27Fj/Lw106NCh+v9t27bliy++WKP1iEjLoibgtdCQIUOYOXMms2fPZtmyZUyYMIER\nI0bUSPP2229z8MEHc8MNN7DNNttUT3d3jj32WPr168epp57a1FkXabGGDx/O3/72N5YvXw7A66+/\nzqeffsrHH39M165dadeuHY888ghvvfUWEH1sP/nkk+rlt9xySyoqKli6dCkfffQRDz/8cNHtdOrU\niV69enHrrbcCcc3mRvEXGjZsGGPHjmXXXXcFYNddd+Wiiy5i6NCh1e/j22effbjkkkuqlykWWA4d\nOpTbb78dgAkTJpS0Pwq/n4i0LqoBXAuVlZVx6aWXMnz4cKqqqjjmmGMYMGAA48aNA2D06NGcffbZ\nLFy4sLrvUFlZGdOmTeOpp57ihhtuYODAgQwaNAiA8847j/3337/Zvo/I6viPvbmzAMBxxx3HnDlz\nGDx4MO5Oly5duPPOOzn88MM54IADGDhwIOXl5Wy77bZA9Onbbbfd2G677dhvv/04//zz+f73v892\n221Hr1692HHHHWvd1k033cRPf/pTzjnnHJYvX87IkSPZYYcdVkm32267cdFFF1UHgIMHD6aysrJG\nP7+LL76YE044ge23354vvviCPffcs7qsyBk7dixHHHEE5557Lvvuuy8bbrhhnftj1KhR7LvvvtV9\nAUWkdTH3taPwbWjl5eU+bdq05s6GiBR49dVX6devX3NnI1M+++wz1llnHcyMCRMmcMstt6zyZoH6\n0DEUWXuZ2XR3L68rnWoARURauenTp3PiiSfi7my00UZce+21zZ0lEWlmCgBFRFq5PfbYo9Z+hiKS\n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\n006rMb2srIwLL7yQiooKJk+ezGWXXbbKsiIiTanOANDMeptZb6CNmfXKfU5/3wKWNH42RUSa15Qp\nU+jTpw+9e/emffv2jBw5krvuuqtGmq5duzJkyBDatWtXY/rmm2/O4MGDAdhggw3o168f8+bNa7K8\ni4gUKishzSzAAQPeKJg3HzirgfMkIrLWmTdvHj169Kj+3L17d5555pl6r2fOnDk899xz7LLLLg2Z\nPRGReqkzAHT3NgBm9pi7f63xsyQi0jotXryYQw45hLFjx9KpU6fmzo6IZFjJfQAV/IlIlnXr1o25\nc+dWf66srKRbt24lL798+XIOOeQQDj/8cA4++ODGyKKISMnqMwq4l5ndbGYVZvZ2/l9jZlBEZG0w\nZMgQZs6cyezZs1m2bBkTJkxgxIgRJS3r7hx77LH069ePU089tZFzKqXSqG7JslL6AObcTPQB/AXw\nWeNkR0Rk7VRWVsall17K8OHDqaqq4phjjmHAgAGMGzcOgNGjRzN//nzKy8tZtGgRbdq0YezYsVRU\nVPDiiy9yww03MHDgQAYNGgTAeeedx/7779+cXynTcqO6H3zwQbp3786QIUMYMWIE/fv3r06TG9V9\n55131lg2N6p78ODBfPLJJ+y0007svffeNZYVWdvVJwAcAOzm7isaKzMiImuz/ffff5WgbfTo0dX/\n32yzzaisrFxlud133x13b/T8SenyR3UD1aO684O4rl270rVrV+65554ay26++eZsvvnmQM1R3QoA\npSWpz3sAHwd2bKyMiIiINJVio7rX5NU8GtUtLdVqawDN7Oy8j3OAiWZ2B/H6l2ru/vuGz5qIiMja\nS6O6pSWrqwm4R8HnfwPtikwXERFpMTSqW7JutQGgux/dVBkRERFpKvmjurt168aECRO4+eabS1pW\no7qlNSh5EEj6ObhilgLvanCIiIi0FBrVLVlnpY5MM7MVxE/CQfwsXP6CK4C7gePd/b0GzeEaKi8v\n92nTpjXKuu06a5T1tmT+45Y5wlHHclU6lq1HSz2WIrLmzGy6u5fXla4+o4B/QrwLcBugI9AXuAE4\nHhhI1CZeVv+sioiIiEhTqs97AP8f0Mfdl6TPs8zseOB1d7/CzI4CZjZ0BkVERESkYdWnBrAN0LNg\n2leBtun/n1K/gFJEREREmkF9AraxwH/M7O/AXKA7cHSaDrA/8HTDZk9EREREGlrJAaC7/9nMXgQO\n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\n/w/tV9U5UtkG7AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1979ff14f60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# TODO：导入一个有'feature_importances_'的监督学习模型\n",
    "\n",
    "# TODO：在训练集上训练一个监督学习模型\n",
    "model = tree.DecisionTreeClassifier().fit(X_train,y_train)\n",
    "\n",
    "# TODO： 提取特征重要性\n",
    "importances = model.feature_importances_\n",
    "\n",
    "# 绘图\n",
    "vs.feature_plot(importances, X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 7 - 提取特征重要性\n",
    "观察上面创建的展示五个用于预测被调查者年收入是否大于\\$50,000最相关的特征的可视化图像。\n",
    "\n",
    "_这五个特征的权重加起来是否超过了0.5?_<br>\n",
    "_这五个特征和你在**问题 6**中讨论的特征比较怎么样？_<br>\n",
    "_如果说你的答案和这里的相近，那么这个可视化怎样佐证了你的想法？_<br>\n",
    "_如果你的选择不相近，那么为什么你觉得这些特征更加相关？_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**回答：**\n",
    "\n",
    "权重为0.73，超过了0.5\n",
    "有marital-status，education-num，age和hours-per-week符合，但是权重不同。\n",
    "occupation相关性也比较强，但是由于模型工作分类比较多，定义比较模糊，所以导致模型认为相关性不强。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 特征选择\n",
    "\n",
    "如果我们只是用可用特征的一个子集的话模型表现会怎么样？通过使用更少的特征来训练，在评价指标的角度来看我们的期望是训练和预测的时间会更少。从上面的可视化来看，我们可以看到前五个最重要的特征贡献了数据中**所有**特征中超过一半的重要性。这提示我们可以尝试去**减小特征空间**，简化模型需要学习的信息。下面代码单元将使用你前面发现的优化模型，并**只使用五个最重要的特征**在相同的训练集上训练模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Final Model trained on full data\n",
      "------\n",
      "Accuracy on validation data: 0.8542\n",
      "F-score on validation data: 0.7194\n",
      "\n",
      "Final Model trained on reduced data\n",
      "------\n",
      "Accuracy on validation data: 0.8380\n",
      "F-score on validation data: 0.6838\n"
     ]
    }
   ],
   "source": [
    "# 导入克隆模型的功能\n",
    "from sklearn.base import clone\n",
    "\n",
    "# 减小特征空间\n",
    "X_train_reduced = X_train[X_train.columns.values[(np.argsort(importances)[::-1])[:5]]]\n",
    "X_val_reduced = X_val[X_val.columns.values[(np.argsort(importances)[::-1])[:5]]]\n",
    "\n",
    "# 在前面的网格搜索的基础上训练一个“最好的”模型\n",
    "clf_on_reduced = (clone(best_clf)).fit(X_train_reduced, y_train)\n",
    "\n",
    "# 做一个新的预测\n",
    "reduced_predictions = clf_on_reduced.predict(X_val_reduced)\n",
    "\n",
    "# 对于每一个版本的数据汇报最终模型的分数\n",
    "print (\"Final Model trained on full data\\n------\")\n",
    "print (\"Accuracy on validation data: {:.4f}\".format(accuracy_score(y_val, best_predictions)))\n",
    "print (\"F-score on validation data: {:.4f}\".format(fbeta_score(y_val, best_predictions, beta = 0.5)))\n",
    "print (\"\\nFinal Model trained on reduced data\\n------\")\n",
    "print (\"Accuracy on validation data: {:.4f}\".format(accuracy_score(y_val, reduced_predictions)))\n",
    "print (\"F-score on validation data: {:.4f}\".format(fbeta_score(y_val, reduced_predictions, beta = 0.5)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 8 - 特征选择的影响\n",
    "\n",
    "*最终模型在只是用五个特征的数据上和使用所有的特征数据上的 F-score 和准确率相比怎么样？*  \n",
    "*如果训练时间是一个要考虑的因素，你会考虑使用部分特征的数据作为你的训练集吗？*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**回答：**\n",
    "只使用5个特征导致准确率和F-score下降，但是训练时间变少。\n",
    "使用部分特征能明显的降低训练时间，如果精度下降并不大，可以使用部分特征。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题 9 - 在测试集上测试你的模型\n",
    "\n",
    "终于到了测试的时候，记住，测试集只能用一次。\n",
    "\n",
    "*使用你最有信心的模型，在测试集上测试，计算出准确率和 F-score。*\n",
    "*简述你选择这个模型的原因，并分析测试结果*\n",
    "\n",
    "回答：该模型精度较大，准确度有84.56%，F值为0.7，时间成本较小，而且比较简单"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy on test data: 0.8456\n",
      "F-score on test data: 0.7004\n"
     ]
    }
   ],
   "source": [
    "#TODO test your model on testing data and report accuracy and F score\n",
    "best_clf_predict=best_clf.predict(X_test)\n",
    "print (\"Accuracy on test data: {:.4f}\".format(accuracy_score(y_test, best_clf_predict)))\n",
    "print (\"F-score on test data: {:.4f}\".format(fbeta_score(y_test, best_clf_predict, beta = 0.5)))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid syntax (<ipython-input-26-4fa2ef6e36a5>, line 1)",
     "output_type": "error",
     "traceback": [
      "\u001b[1;36m  File \u001b[1;32m\"<ipython-input-26-4fa2ef6e36a5>\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m    > **注意：** 当你写完了所有的代码，并且回答了所有的问题。你就可以把你的 iPython Notebook 导出成 HTML 文件。你可以在菜单栏，这样导出**File -> Download as -> HTML (.html)**把这个 HTML 和这个 iPython notebook 一起做为你的作业提交。\u001b[0m\n\u001b[1;37m    ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n"
     ]
    }
   ],
   "source": [
    "> **注意：** 当你写完了所有的代码，并且回答了所有的问题。你就可以把你的 iPython Notebook 导出成 HTML 文件。你可以在菜单栏，这样导出**File -> Download as -> HTML (.html)**把这个 HTML 和这个 iPython notebook 一起做为你的作业提交。"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
